/*
	Compresor Gzip
    Copyright (C) 2012 Darío López Padial 
    @bukosabino

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>
*/

/**
@file crc32.h
@brief Especificación de la Clase crc32.
@author Dario Lopez Padial
*/

#ifndef _CRC_32_H_
#define _CRC_32_H_

/**
@class crc32
@brief Calcula el código de redundancia cíclica de 32 bits, de una secuencia de caracteres procesada.
	Podemos:
		Actualizar el valor del código de una cadena de caracteres. ( Add ( byte ) ).
		Consultar el valor del código. ( Get ( ) ).
*/

class crc32 {
	unsigned long c;
	unsigned long tabla[256];

	public: 

		/**
		@brief	Constructor por defecto. Crea una tabla vacía. Otorgamos a nuestro entero c el valor 1 por defecto.
		*/
		crc32 ();

		/**
		@brief			Actualiza el valor de la cadena siguiendo el algoritmo crc32.
		@param byte:	Introducimos un nuevo byte al que aplicarle el algoritmo.
		*/
		void Add (unsigned char byte);
	
		/**
		@brief	Devuelve el valor actual del código de redundacia cíclica.
		*/
		unsigned long Get () const;

};
#endif
